/***
*@autor Aquiles Canto
*/

var ruta_raiz="."

var diasMinimo=5;

var fechaEntrada = new Array();
var fechaSalida = new Array();

/**constante que almacena clos componentes de persona*/
controlPersona=new Array("cedexu","nombre","applli","apmlli","idconf","nmextp");


/**
*número de elementos Creados
*asegura que cada componente creado herede de su padre los valoeres
*pero que posea un identificaor ùnico.
*/

var nodo=0;

/**
*numero de calendarios ingresados
*/
var calendarios=1;

/**
*
*número de comisiones que han sido creadas
*/
var comision=1;
/**
*número de personas que han sido creadas
* tanto comisiones y personas aseguran la creacion de controles con un único identificador
*/
var personas=1;
var hoy=new Date();

/**
*fuincion que determina el año valido para los clendarios;
*
*@return int año máximo.
*/
function definirAnno(){
	var salida=hoy.getFullYear();
	if(hoy.getMonth()==11){
		salida=hoy.getFullYear()+1;
	}
	return salida;
}

	fechaEntrada.push(new ctlSpiffyCalendarBox("fechaEntrada[0]","comi", "entrada_fecha","entrada_btnDate","dd/mm/yyyy",scBTNMODE_CUSTOMBLUE));
	fechaSalida.push(new ctlSpiffyCalendarBox("fechaSalida[0]","comi", "salida_fecha","salida_btnDate","dd/mm/yyyy",scBTNMODE_CUSTOMBLUE));

/**
*definimos la función que permite dependiendo del navegador define el objeto xmlhttp a
*con el cual trabajar las peticiones
*/

function nuevoAjax(){
	var xmlhttp=false;
	if(typeof XMLHttpRequest!='undefined'){
		xmlhttp = new XMLHttpRequest();
	}else{
		try {
			this.xmlhttp = new ActiveXObject("Msxml2.XMLHTTP");
		} catch (e) {
			try {
					this.xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
			} catch (E) {
				xmlhttp = false;
			}
		}
	}
	return xmlhttp;
}

/**
*función que adiciona una pareja de Calendarios al formulario
*/
function adicionarCalendario(){
	try{
	fechaMinima=hoy.getDate();
	fechaEntrada.push(new ctlSpiffyCalendarBox("fechaEntrada["+calendarios+"]","comi", "entrada_fecha"+nodo,"entrada_btnDate"+nodo,"dd/mm/yyyy",scBTNMODE_CUSTOMBLUE));
	fechaSalida.push(new ctlSpiffyCalendarBox("fechaSalida["+calendarios+"]","comi", "salida_fecha"+nodo,"salida_btnDate"+nodo,"dd/mm/yyyy",scBTNMODE_CUSTOMBLUE));
	
	longitud=fechaEntrada.length-1;
	
	fechaEntrada[longitud].escribirControl("calendarioEntrada"+nodo);
	fechaSalida[longitud].escribirControl("calendarioSalida"+nodo);
	fechaSalida[longitud].disable();
	fechaEntrada[longitud].useDateRange=true;
	fechaSalida[longitud].useDateRange=true;
	fechaEntrada[longitud].dateFormat="dd/MM/yyyy";
        fechaSalida[longitud].dateFormat="dd/MM/yyyy";
	
	
	fechaEntrada[longitud].setMinDate(hoy.getFullYear(),hoy.getMonth()+1,fechaMinima);
	fechaEntrada[longitud].setMaxDate(definirAnno(),hoy.getMonth()+3,fechaMinima);
	fechaEntrada[longitud].JStoRunOnSelect="calcularRangoRegreso("+longitud+","+fechaMinima+");";
	
	calendarios++;
	}
	catch(e){
		//alert(e);
	}
}

/**
*funcion quehabilita el rango de entrada del control */ 

function calcularRangoRegreso(control,minimo) {

	fechaSalida[control].enable();
	fechaSalida[control].setSelectedDate("");
	
	var feCalDepende = calMgr.getDateFromFormat(fechaEntrada[control].getSelectedDate(),fechaEntrada[control].dateFormat);
		fechaSalida[control].setMinDate(feCalDepende.getFullYear(), feCalDepende.getMonth()+1,feCalDepende.getDate());
		fechaSalida[control].setMaxDate(feCalDepende.getFullYear(), feCalDepende.getMonth()+4,minimo);
	}

/**
*
*funcion que enmascara el usio tagname
*/
function $TN(tag,elemento){
	var salida;
	if(typeof elemento !='undefined')
		salida=elemento.getElementsByTagName(tag);
	else
		salida=document.getElementsByTagName(tag);
	return salida;
}

/**
*función que enmascara la solicitud de un elemnto por el id
*idea original de prototype
*/
function $(idControl){
		return document.getElementById(idControl);
}
/**
*funcion que retorna el código de la tecla oprimido independiente del
*navegador nota ha sido provado con mozilla-firefox
*/
function resolverTipoTecla(event){
	if(typeof event.which!='undefined')
		return event.which;
	else
		return event.keyCode;
}
/**
*funcion que verifica si el control se encuentra visible
*/
function esVisibleControl(control){
	return (!($(control).style.display=="none"));
}
/**
*
*función que cambia el estado de un control de visible a
*oculto
*/
function cambiarVisibleControl(control){
		if(esVisibleControl(control))
			$(control).style.display="none";
		else
			$(control).style.display=""	;
}
/**
*funciòn que posiciona el foco en un control 
*/
function saltarFoco(control){
		$(control).focus();
}
/**
*función que toma los resultados obtenidos al 
*seleecionar y los obica en su respaectivo valor
*/

function repartir(valor){
	cadena=valor.split("\|");
	id=cadena[0];
	for(i=0;i<controlPersona.length;i++){
		nombreControl=controlPersona[i]+id;
		$(nombreControl).value=cadena[i+1];
	}
	saltarFoco('objeto'+id);
	cambiarVisibleControl('resultado');
}
/**
*funcion que busaca la cordenada x del objeto
*/
function X(obj){
	var posicion = 0;
	if (obj.offsetParent){
		while (obj.offsetParent){
			posicion += obj.offsetLeft
			obj = obj.offsetParent;
		}
	}else if (obj.x)
		posicion += obj.x;
	return posicion;
}
/**
*funcion que busca la coordenada y del objeto 
*/	

function Y(obj){
	var posicion = 0;
	if (obj.offsetParent){
		while (obj.offsetParent){
			posicion += obj.offsetTop
			obj = obj.offsetParent;
		}
	}
	else if (obj.y)
		posicion += obj.y;
	return posicion;
}

/**
*función que maneja el vento de teclado en un componente de 
*consulta
*/
function manejarTecla(e){
	tecla=resolverTipoTecla(e);
		if((tecla=="40"||tecla=="38" && esVisibleResultado())){
			saltarFoco('resultados');
		} else if(tecla=="13"){
			if(esVisibleControl('resultado')){
				repartir($('resultados').value);
				cambiarVisibleControl('resultado');
			}
	}else{
		consulta(this)
	}
}
/**
*funcion que enmascara la consulta 
*/	

function buscar(nombre){
		nombre.onkeyup=manejarTecla;
	}

/**
*fuciopn que realiza la consulta 
*/
function consulta(obs){
	if(obs.value!="" && obs.value.length>=3){
		px=X(obs);
		py=Y(obs);
		
		pagina="generacionComision.php?consulta="+obs.id+"|"+obs.value;
			
		obj=$('resultado');
		obj.style.position='absolute';
		obj.style.left =px+"px";
		obj.style.top = py+25+"px";
		obj.style.display=""
					
		ajax=nuevoAjax();
		ajax.open("GET",pagina ,true);
		ajax.onreadystatechange=function() {
		if (ajax.readyState==4) {
			if(ajax.responseText=="")
					alert('No se encontyraron coincidencias en la base de datos \n o la persona no poesee permisos de Comisiones');
				else	
					$('resumen').innerHTML = ajax.responseText;
			}
		}
		ajax.send(null)
	}else{
		if(esVisibleControl('resultado'))
			cambiarVisibleControl('resultado');
	}
}
/**
*funcion que enmascara el evento del teclado en el control
*/
function solver(slc){
		slc.onkeyup=sel;
}
/**
*funcion que maneja el evento de teclado en el control
*/
function sel(e){
		tecla=resolverTipoTecla(e);
		if(tecla=="13"){
			repartir(this.value);
		}
	}
/**
*funcion que oculta enmascara el evento onblur
*/
function oculta(nombre){
			cambiarVisibleControl('resultado');
}
/**
*funcion que activa la lista de seleccion con los resultados
*/

function activarLista(){
		if(!esVisibleControl('resultado')){
			cambiarVisibleControl('resultado');
		}
	}

/**
funcion que genera una raiz exactamente igual a la raiz
*/
function recorre(raiz,contenedor,nodo){
	var hijos=raiz.childNodes;
    if(hijos.length > 0){
       for (var i = 0; i < hijos.length; i++)
       	  if (hijos[i].nodeType == 1 && hijos[i].nodeName!="SCRIPT"){
       	     hijo=document.createElement(hijos[i].nodeName);
       	     atributos=hijos[i].attributes;
       	     for(j=0;j<atributos.length;j++){
       	      		if(atributos[j].name!="disabled")
       	      			hijo.setAttribute(atributos[j].name,atributos[j].value);
       	      		}
       	      if(typeof hijos[i].name!='undefined'){
       	      		if((hijos[i].name).length==6){	
       	      			hijo.name="comisiones["+comision+"][persona"+personas+"]["+hijos[i].name+"]";
       	      		}else{
       	      			hijo.name="comisiones["+comision+"]["+hijos[i].name+"]";
       	      		}
       	      	}
       	      hijo.id= typeof hijos[i].id!='undefined'?hijos[i].id+nodo:null;
       	      contenedor.appendChild(hijo);
       	      if(hijo.getAttribute("class")!="calendariocomision"){
       	      		recorre(hijos[i],hijo,nodo);
       	      		}
       	   }else{
       	      	hijo=document.createTextNode(hijos[i].nodeValue,nodo);
       	      	contenedor.appendChild(hijo);
       	   }	
   	 }
}
/**
*funcion que llama a las funciones necesarias para 
*generar un nuevo tipo
*/
function adicionar(tipo){
		nodo++;
		var principal = $("principal");
		 if(tipo=="com"){
		 	contenedor=document.createElement("tr");
			contenedor.id=comision;
			contenedor.setAttribute("class","listado2");
			recorre($("comision"),contenedor,nodo);
		    principal.appendChild(contenedor);
		    adicionarCalendario();
		    comision++;
		}else{
			id=tipo.substring(6);
			comisionActual=comision;
			comision=$(tipo).parentNode.parentNode.id;
			contenedor=document.createElement("tr");
			contenedor.id=nodo;
			contenedor.setAttribute("class","listado2");
			recorre($("persona"),contenedor,nodo);
		    nuevo=$(tipo).parentNode.parentNode.parentNode;
		    nuevo.appendChild(contenedor);
		    adicionarCalendario();
		    comision=comisionActual;
		 }
		 personas++;
	}

/**
*funcion que elimina un tipo
*/

function eliminar(nodo){
	cas = $(nodo).parentNode.parentNode;
	cd = cas.parentNode.parentNode;
	if((cd.id.substr(0,8)=="personal") && $TN('TR',cd).length-10 <= 2){
		alert('La comision debe tener almenos una persona');
	}else{
		
		cas.parentNode.removeChild(cas);
	}
}

/**
*funcion que valida los datos en caso de no hallar ninguna incongruencia 
*diligencia el formulario
*/
function recorrer(elemento){
	var elemnt = elemento.childNodes;
	var salida ="";
	for (var i = 0; i <elemnt.length; i++){
		  if (elemnt[i].nodeType==1 && elemnt[i].nodeName!="SCRIPT" && (elemnt[i].nodeName=="INPUT" || elemnt[i].nodeName == "SELECT"|| elemnt[i].nodeName=="TEXTAREA")){
		  	if(elemnt[i].value=="" ){
				salida=elemnt[i].getAttribute('id');
			}
		}
	}
	
	return salida;
}
function validar(){
	elementos=$TN('TD',$('principal'));
	foco="";
	if(elementos.length < 1){
		alert("Almenos debes diligenciar una Comision");
	}else{
		for(i=0;i<elementos.length;i++){
			if(elementos[i].getAttribute('class')=='obligatorio'|| elementos[i].getAttribute('class')=='calendariocomision'){
				err=(recorrer(elementos[i]))
				if(err!=""){
					foco=(foco == "")?err:foco;
				}
			}
		}
		if(foco!=""){
			alert("Faltan Campos Por diligenciar porfavor verique e intente de Nuevo ");
				$(foco).focus();
		}else{
				$('comi').submit();
		}
	}
}
